<?php
/**
 * @APP@
 *
 * PHP versions 5
 *
 * @category   BEAR
 * @package    App
 * @subpackage App_Auth
 * @author     $Author: anonymous $ <anonymous@example.com>
 * @version    SVN:$
 */

/**
 * リソース認証アダプター
 *
 * <pre>
 * Zend_Auth_Adapter_Interfaceを実装した認証アダプタークラスです。
 * roを使ってApp_Authでの認証のアダプターとして使っています。
 * </pre>
 *
 * @category   BEAR
 * @package    App
 * @subpackage App_Aspect
 * @author     $Author: anonymous $ <anonymous@example.com>
 * @copyright  anonymous All rights reserved.
 * @version    SVN: Release: $Id:$
 */
class App_Auth_Adapter_Resource extends BEAR_Base implements Zend_Auth_Adapter_Interface
{
    /**
     * 認証用のユーザ名とパスワードを設定します
     *
     * @return void
     */
    public function __construct(array $config)
    {
        parent::__construct($config);
    }

    /**
     * 認証を試みます
     *
     * @throws Zend_Auth_Adapter_Exception が、認証処理をできなかった場合に発生します
     *
     * @return Zend_Auth_Result
     */
    public function authenticate()
    {
        $params = array('uri'=>'User/Login', 'values'=>$this->_config);
        $resource = BEAR::dependency('BEAR_Resource');
        $user = $resource->read($params)->link('user')->link('profile')->getBody(true);
        unset($user['user_login']);
        $identify = array('id' => $user['user']['id'], 'user_name' => $user['user']['user_name']);
        if ($user) {
            $result = new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $identify);
        } else {
            $result = new Zend_Auth_Result(Zend_Auth_Result::FAILURE, $identify);
        }
        return $result;
    }
}